<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // ES8 通过async 和 await把 调用简写
        // 提供了一种语法糖:利用同步语法 书写异步
        // async 和 await
        // 1.await一定在async里面
        // 2.await和async不能嵌套

        // 定义不变
        // let p1 = new Promise((resolve, reject) => {
        //     setTimeout(() => {
        //         resolve(111)
        //     }, 1000)
        // })
        // let p2 = new Promise((resolve, reject) => {
        //     setTimeout(() => {
        //         resolve(222)
        //     }, 2000)
        // })
        // let p3 = new Promise((resolve, reject) => {
        //     setTimeout(() => {
        //         resolve(333)
        //     }, 3000)
        // })

        // async function myFn(){
        //     await p1.then(res=>console.log(res));    //await会等待promise的执行结果再实行下一步
        //     await p2.then(res=>console.log(res));
        //     await p3.then(res=>console.log(res));
        // }

        // myFn();

        // ——————————————————————————————————————————————————————————————

        function fn1() {
            return new Promise(resolve => {
                setTimeout(() => {
                    console.log(3);
                    resolve(3);
                }, 1000)
            })
        }

        function fn2() {
            return new Promise(resolve => {
                setTimeout(() => {
                    console.log(2);
                    resolve(2);
                }, 1000)
            })
        }
        function fn3() {
            return new Promise(resolve => {
                setTimeout(() => {
                    console.log(1);
                    resolve(1);
                }, 1000)
            })
        }
        // async function myFn() {
        //     try {
        //         let res1 = await fn1();    //await会等待promise的执行结果再实行下一步
        //         await fn2();
        //         await fn3();
        //         console.log('res1' + res1);
        //     } catch (err) { }
        // }

        async function myFn(arr) {
            // 这个不能用forEach,因为forEach里面的操作是写在另一个函数里的
            for (var i = 0; i < arr.length; i++) {
                await arr[i]();
            }
        }

        myFn([fn1, fn2, fn3])


        // 如果要传值,要用变量保存上一次的结果
        // async function request() {
        //     try {
        //         const result = await doSomething()
        //         const newResult = await doSomethingElse(result)
        //         const finalResult = await doThirdThing(newResult)
        //         console.log('Got the final result:' + finalResult)
        //     } catch (error) {
        //         failureCallback(error)
        //     }


    </script>
</body>

</html>